<?php
/**
 * Created by PhpStorm.
 * User: edmmss
 * Date: 2019/1/25
 * Time: 11:36
 */

namespace app\modules\serviceLocator\controller;

use app\modules\serviceLocator\LogService;
use app\modules\serviceLocator\ServiceLocator;
use yii\web\Controller;

class DefaultController extends Controller
{
    /**
     * 服务定位器模式示例
     * 服务定位器模式能够降低代码的耦合度，以便获得可测试、可维护和可扩展的代码。DI 模式和服务定位器模式是 IOC 模式的一种实现
     * 使用 ServiceLocator ，你可以为给定的 interface 注册一个服务。通过使用这个 interface，你不需要知道该服务的实现细节，
     * 就可以获取并在你应用中使用该服务。你可以在引导程序中配置和注入服务定位器对象
     *
     * @date   2019/1/25
     * @author edmmss
     * @return bool
     */
    public function actionIndex()
    {
        $serviceLocator = new ServiceLocator();
        $className = LogService::class;
        $serviceLocator->addInstance($className, new LogService());

        $object = $serviceLocator->get($className);
        var_dump($object);

        return true;
    }
}

